﻿/*----------------------------------------------------------------
//  <copyright file="WeChatUserInfoDto.cs" company="MicroCloud@151504200868">
//      Copyright © 2020-2024 MicroCloud Corporation, All rights reserved.
//  </copyright>
//  <site>https://gitee.com/chenmm123/microclouds</site>
//  <last-editor>cmm</last-editor>
//  <last-date>2023-09-19 09:55</last-date>
//----------------------------------------------------------------*/

namespace MicroCloud.Authentication.OAuth2.WeChat.Dtos
{
    #region "微信用户信息DTO"
    /// <summary>
    /// 微信用户信息DTO
    /// </summary>
    public class WeChatUserInfoDto
    {
        #region "属性"
        #region "获取或设置 普通用户的标识，对当前开发者帐号唯一"
        /// <summary>
        /// 获取或设置 普通用户的标识，对当前开发者帐号唯一
        /// </summary>
        public string OpenId { get; set; }
        #endregion
        #region "获取或设置 普通用户昵称"
        /// <summary>
        /// 获取或设置 普通用户昵称
        /// </summary>
        public string NickName { get; set; }
        #endregion
        #region "获取或设置 普通用户性别"
        /// <summary>
        /// 获取或设置 普通用户性别
        /// </summary>
        public Gender Gender { get; set; }
        #endregion
        #region "获取或设置 普通用户个人资料填写的省份"
        /// <summary>
        /// 获取或设置 普通用户个人资料填写的省份
        /// </summary>
        public string Province { get; set; }
        #endregion
        #region "获取或设置 普通用户个人资料填写的城市"
        /// <summary>
        /// 获取或设置 普通用户个人资料填写的城市
        /// </summary>
        public string City { get; set; }
        #endregion
        #region "获取或设置 国家，如中国为CN"
        /// <summary>
        /// 获取或设置 国家，如中国为CN
        /// </summary>
        public string Country { get; set; }
        #endregion
        #region "获取或设置 用户头像"
        /// <summary>
        /// 获取或设置 用户头像
        /// ，最后一个数值代表正方形头像大小（有0、46、64、96、132数值可选，0代表640*640正方形头像）
        /// ，用户没有头像时该项为空
        /// </summary>
        public string HeadImgUrl { get; set; }
        #endregion
        #region "获取或设置 用户特权信息，json数组，如微信沃卡用户为（chinaunicom）"
        /// <summary>
        /// 获取或设置 用户特权信息，json数组，如微信沃卡用户为（chinaunicom）
        /// </summary>
        public string[] Privilege { get; set; }
        #endregion
        #region "获取或设置 用户统一标识。针对一个微信开放平台帐号下的应用，同一用户的unionid是唯一的。"
        /// <summary>
        /// 获取或设置 用户统一标识。针对一个微信开放平台帐号下的应用，同一用户的unionid是唯一的。
        /// </summary>
        public string UnionId { get; set; }
        #endregion

        #endregion

        #region "构造函数"
        #region "初始化一个微信用户信息DTO的新实例"
        /// <summary>
        /// 初始化一个微信用户信息DTO的新实例
        /// </summary>
        public WeChatUserInfoDto()
        { }
        #endregion
        #region "初始化一个微信用户信息DTO的新实例"
        /// <summary>
        /// 初始化一个微信用户信息DTO的新实例
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="nickName"></param>
        /// <param name="gender"></param>
        /// <param name="province"></param>
        /// <param name="city"></param>
        /// <param name="country"></param>
        /// <param name="headImgUrl"></param>
        /// <param name="privilege"></param>
        /// <param name="unionId"></param>
        public WeChatUserInfoDto(string openId, string nickName, Gender gender
            , string province, string city, string country
            , string headImgUrl, string[] privilege, string unionId)
        {
            OpenId = openId;
            NickName = nickName;
            Gender = gender;
            Province = province;
            City = city;
            Country = country;
            HeadImgUrl = headImgUrl;
            Privilege = privilege;
            UnionId = unionId;
        }
        #endregion
        #region "初始化一个微信用户信息DTO的新实例"
        /// <summary>
        /// 初始化一个微信用户信息DTO的新实例
        /// </summary>
        /// <param name="jObject"></param>
        public WeChatUserInfoDto(JObject jObject)
        {
            OpenId = jObject?.Value<string>("openid");
            NickName = jObject?.Value<string>("nickname");
            Gender = jObject.Value<string>("sex").CastTo(Gender.Unknown);
            Province = jObject?.Value<string>("province");
            City = jObject?.Value<string>("city");
            Country = jObject?.Value<string>("country");
            HeadImgUrl = jObject?.Value<string>("headimgurl");
            Privilege = jObject.Value<JArray>("privilege") == null ? new string[0] : jObject.Value<JArray>("privilege").ToObject<string[]>();
            UnionId = jObject?.Value<string>("unionid");
        }
        #endregion

        #endregion

    }
    #endregion

}
